/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import clases.Articulo;
import clases.Comprobante;
import clases.DetalleComprobante;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author root
 */
public class MdlDetalleComprobante implements Modelo<DetalleComprobante>{

    /**
     * 
     * @param detallecomprobante
     * @param cnx
     * @throws SQLException 
     */
    @Override
    public void insert(DetalleComprobante detallecomprobante, Conexion cnx) throws SQLException {
        String sql = "INSERT INTO detalleComprobante(comprobante, articulo, cantidad, precio, igv) "
                + "VALUES (" + detallecomprobante.getComprobante().getIdComprobante() + ", "
                + detallecomprobante.getArticulo().getIdArticulo() + ", "
                + detallecomprobante.getCantidad() + ", "
                + detallecomprobante.getPrecio() + ", "
                + detallecomprobante.getIgv() + ");";
        cnx.ejecutar(sql);
    }

    /**
     * 
     * @param cnx
     * @return
     * @throws SQLException 
     */
    @Override
    public int getLastId(Conexion cnx) throws SQLException {
        String sql = "SELECT MAX(idDetalleComprobante) FROM detalleComprobante;";
        ResultSet rs = cnx.consultar(sql);
        if (rs.next()) {
            return rs.getInt(1);
        }
        return -1;
    }

    /**
     * 
     * @param detallecomprobante
     * @param cnx
     * @throws SQLException 
     */
    @Override
    public void update(DetalleComprobante detallecomprobante, Conexion cnx) throws SQLException {
        String sql = "UPDATE detalleComprobante SET "
                + "comprobante = " + detallecomprobante.getComprobante().getIdComprobante() + ", "
                + "articulo = " + detallecomprobante.getArticulo().getIdArticulo() + ", "
                + "cantidad = " + detallecomprobante.getCantidad() + ", "
                + "precio = " + detallecomprobante.getPrecio() + ", "
                + "igv = " + detallecomprobante.getIgv() + " "
                + "WHERE idDetalleComprobante = " + detallecomprobante.getIdDetalleComprobante();
        cnx.ejecutar(sql);
    }
    
    /**
     * 
     * @param query
     * @param cnx
     * @return
     * @throws SQLException 
     */
    @Override
    public ArrayList<DetalleComprobante> get(String query, Conexion cnx) throws SQLException {
        ResultSet rs = cnx.consultar(query);
        ArrayList<DetalleComprobante> detalles = new ArrayList();
        while(rs.next()){
            detalles.add(new DetalleComprobante(
                    rs.getInt(1),
                    new Comprobante(){
                        {
                            this.setIdComprobante(rs.getInt(2));
                        }
                    },
                    new Articulo(){
                        {
                            this.setIdArticulo(rs.getInt(3));
                        }
                    },
                    rs.getInt(4),
                    rs.getFloat(5),
                    rs.getFloat(6)
            ));
        }
        return detalles;
    }

    /**
     * 
     * @param id
     * @param cnx
     * @return
     * @throws SQLException 
     */
    @Override
    public DetalleComprobante get(int id, Conexion cnx) throws SQLException {
        String sql = "SELECT * FROM detalleComprobante WHERE idDetalleComprobante LIKE " + id;
        ResultSet rs = cnx.consultar(sql);
        DetalleComprobante detalle = null;
        if (rs.next()) {
            detalle = new DetalleComprobante(
                    rs.getInt(1),
                    new Comprobante(){
                        {
                            this.setIdComprobante(rs.getInt(2));
                        }
                    },
                    new Articulo(){
                        {
                            this.setIdArticulo(rs.getInt(3));
                        }
                    },
                    rs.getInt(4),
                    rs.getFloat(5),
                    rs.getFloat(6)
            );
        }
        return detalle;
    }
    
}
